import { CommonIdType } from './id-or-enum.model';
import { Message } from './msg.model';
import {
  Album,
  Artist,
  CommentInfo,
  MusicInfo,
  MVInfo,
  SongListInfo,
} from './music-info.model';
import { TopListInfo } from './top-list.model';

/**
 *   专辑接口信息，如专辑下有什么歌曲
 */
export interface AlbumResponse {
  songs: MusicInfo[];
  album: Album;
}

/**
 *   专辑排行榜返回信息
 */
export interface TopAlbumResponse {
  /**
   *   200 为正常
   */
  code?: number;
  /**
   *   是否有更多
   */
  hasMore?: boolean;
  /**
   *   月榜
   */
  monthData: Album[];
  /**
   *   周榜
   */
  weekData: Album[];
}

/**
 *   歌手的专辑信息
 */
export interface ArtistsAlbumResponse {
  hotAlbums: Album[];
}

/**
 *   歌手的概览信息，如有什么热门歌曲
 */
export interface ArtistSummaryResponse {
  code?: number;
  hotSongs: MusicInfo[];
  more?: boolean;
  artist?: Artist;
}

/**
 *   歌手的介绍信息
 */
export interface ArtistDescResponse {
  /**
   *   简介
   */
  briefDesc: string;
  /**
   *   详细介绍
   */
  introduction: Array<{
    /**
     *   介绍项标题
     */
    ti: string;
    /**
     *   介绍内容
     */
    txt: string;
  }>;
  code?: number;
  /**
   *   未知
   */
  count?: number;
  /**
   *   相关话题，类型略
   */
  topicData?: any[];
}

/**
 *   歌手的MV信息
 */
export interface ArtistMVResponse {
  code?: number;
  /**
   *   一个时间戳，不知道什么时间
   */
  time?: number;
  hasMore?: boolean;
  mvs: MVInfo[];
}

/**
 *   评论信息
 */
export interface CommentTypeResponse {
  code?: number;
  /**
   *   作用未知，可能是广告
   */
  commentBanner?: any;
  comments: CommentInfo[];
  /**
   *   热评
   */
  hotComments: CommentInfo[];
  /**
   *   是否是歌手？
   */
  isMusician: boolean;
  /**
   *   是否还有更多
   */
  more?: boolean;
  moreHot?: boolean;
  /**
   *   置顶的评论
   */
  topComments?: CommentInfo[];
  /**
   *   评论数
   */
  total: number;
  /**
   *   也许是当前用户id，-1代表不存在
   */
  userId?: CommonIdType;
}

/**
 *   推荐歌单列表信息
 */
export interface SongListInfoResponse {
  code?: number;
  /**
   *   是否听过？
   */
  hasTaste?: boolean;
  /**
   *   未知分类
   */
  category?: number;
  /**
   *   歌单列表
   */
  result?: SongListInfo[];
}

/**
 *   全部歌单列表信息
 */
export interface PlayListResponse {
  code?: number;
  /**
   *   分类名称？
   */
  cat?: string;
  /**
   *   是否还有更多
   */
  more?: boolean;
  /**
   *   总数
   */
  total?: number;
  playlist: SongListInfo[];
}

export interface TopPlayListResponse extends Partial<PlayListResponse> {
  playlists: SongListInfo[];
}

/**
 *   榜单列表信息
 */
export interface TopListResponse {
  artistToplist?: TopListInfo;
  code?: number;
  list: TopListInfo[];
}

/**
 *   歌单详情
 */
export interface PlayListDetailResponse {
  code?: number;
  playlist: SongListInfo;
  privileges?: any[];
  relatedVideos?: any;
  urls?: any;
}

/**
 *   推荐歌曲信息（需要登录）
 */
export interface RecommendSongsResponse {
  code?: number;
  recommend: SongListInfo[];
}

/**
 *   部分歌词信息
 */
export interface LyricInfo {
  /**
   *   歌词，JSON string
   */
  lyric: string;
  /**
   *   未知
   */
  version: number;
}

/**
 *   歌词信息
 */
export interface LyricResponse {
  code?: number;
  klyric: LyricInfo;
  lrc: LyricInfo;
  tlyric?: LyricInfo;
  qfy?: boolean;
  sfy?: boolean;
  sgc?: boolean;
}

/**
 *   热门MV信息
 */
export interface HotMVResponse {
  code?: number;
  /**
   *   数据
   */
  data: MVInfo[];
  /**
   *   是否还有更多
   */
  hasMore?: boolean;
  /**
   *   更新时间，时间戳
   */
  updateTime: number;
}

/**
 *   MV详情信息
 */
export interface MVDetailResponse {
  code?: number;
  data: MVInfo;
  bufferPic?: string;
  bufferPicFS?: string;
  loadingPic?: string;
  loadingPicFS?: string;
  mp?: any;
  subed?: boolean;
}

export interface SearchDefaultResponse extends Message {
  data: {
    action?: number;
    alg?: string;
    gap?: number;
    /**
     * 关键字
     */
    realkeyword: string;
    searchType?: number;
    /**
     * 关键字的描述信息，可直接作为字符串显示
     */
    showKeyword?: string;
    source?: any;
  };
}

export interface SearchHotResponse {
  code?: number;
  result: {
    hots: Array<{
      /**
       * 这个就是关键字
       */
      first: string;
      /**
       * 不知道干什么用的
       */
      iconType?: number;
      second?: number;
      third?: number;
    }>;
  };
}

export interface MVUrlResponse {
  code?: number;
  data: {
    id: CommonIdType;
    url: string;
    /**
     * 宽度？1080？
     */
    r?: number;
    /**
     * 大小，Byte
     */
    size?: number;
    /**
     * MD5，可能为空
     */
    md5?: string;
    /**
     * 200
     */
    code?: number;
    /**
     * 时长？秒？
     */
    expi?: number;
    fee?: number;
    mvFee?: number;
    st?: number;
    promotionVo?: any;
    msg?: string;
  };
}

/**
 * 登录成功返回信息中的账号信息
 */
export interface AccountInfo {
  id?: CommonIdType;
  /**
   * 用户名，非昵称，一般和手机号码相关
   */
  userName: string;
  /**
   * 未知类型，手机号密码登陆时为1
   */
  type?: number;
  /**
   * 位置状态，0可能表示正常
   */
  status: number;
  /**
   * 未知，测试返回为0
   */
  whitelistAuthority?: number;
  /**
   * 创建时间，时间戳
   */
  createTime: number;
  /**
   * salt，可能与加密有关，字符串
   */
  salt: string;
  /**
   * 测试为0，作用未知
   */
  tokenVersion?: number;
  /**
   * 0，未知
   */
  ban?: number;
  /**
   * -2，未知
   */
  baoyueVersion?: number;
  /**
   * 0，未知
   */
  donateVersion?: number;
  /**
   * 0，未知
   */
  vipType?: number;
  /**
   * 1591719034983，未知
   */
  viptypeVersion: number;
  /**
   * 匿名
   */
  anonimousUser?: boolean;
}

/**
 * 登录成功返回的信息中的个人资料信息
 */
export interface ProfileInfo {
  /**
   * 昵称
   */
  nickname: string;
  /**
   * 城市码
   */
  city: number;
  /**
   * 是否是音乐制作人？默认0
   */
  djStatus: number;
  /**
   * 背景图片id
   */
  backgroundImgId?: CommonIdType;
  /**
   * vip？默认0
   */
  vipType?: number;
  /**
   * 性别，男为1，猜测0是未知，2是女
   */
  gender?: number;
  /**
   * 状态？是否正常？
   */
  accountStatus?: number;
  /**
   * 使用默认头像
   */
  defaultAvatar?: boolean;
  /**
   * 头像
   */
  avatarUrl: string;
  /**
   * 省份编码
   */
  province?: number;
  /**
   * 生日，时间戳
   */
  birthday: number;
  /**
   * 头像id
   */
  avatarImgId?: number;
  /**
   * 未知类型
   */
  userType?: number;
  /**
   * 描述，可能为空
   */
  description: string;
  /**
   * 专业标签？
   */
  expertTags?: any;
  /**
   * 认证状态？实名认证？默认0
   */
  authStatus?: number;
  /**
   * 用户id
   */
  userId: CommonIdType;
  /**
   * 未知，false
   */
  mutua?: boolean;
  /**
   * 未知
   */
  remarkName?: string;
  /**
   * 未知
   */
  followed?: boolean;
  /**
   * 背景图片
   */
  backgroundUrl: string;
  /**
   * 详细描述？
   */
  detailDescription: string;
  /**
   * 未知
   */
  experts?: any;
  /**
   * 字符串
   */
  avatarImgIdStr?: string;
  /**
   * 字符串
   */
  backgroundImgIdStr?: string;
  /**
   * 个性签名？
   */
  signature: string;
  /**
   * 未知，默认0
   */
  authority?: number;
  /**
   * 字符串
   */
  avatarImgId_str?: string;
  /**
   * 粉丝？
   */
  followeds: number;
  /**
   * 关注的人数？
   */
  follows: number;
  /**
   * 未知,默认0
   */
  eventCount?: number;
  /**
   * 未知
   */
  avatarDetail?: null;
  /**
   * 歌单数
   */
  playlistCount: 4;
  /**
   * 歌单被订阅次数
   */
  playlistBeSubscribedCount: 0;
}

/**
 * 绑定信息，包含在登录信息中
 */
export interface BindingInfo {
  /**
   * 已过期？
   */
  expired: boolean;
  /**
   * 过期时间,时间戳
   */
  expiresIn: number;
  /**
   * 未知 '{"countrycode":"","cellphone":"17324009620","hasPassword":true}'
   */
  tokenJsonStr?: any;
  /**
   * 用户id
   */
  userId: CommonIdType;
  /**
   * 未知，可能为空
   */
  url: string;
  /**
   * 绑定时间,时间戳
   */
  bindingTime: number;
  /**
   * 更新时间,时间戳
   */
  refreshTime: number;
  /**
   * 类型id
   */
  id: number;
  /**
   * 未知类型,1
   */
  type: number;
}

/**
 * 登录成功返回信息
 */
export interface LoginResponse {
  /**
   * 未知类型，手机登录时为1
   */
  loginType?: number;
  code?: number;
  account: AccountInfo;
  /**
   * 口令，作用未知
   */
  token?: string;
  profile: ProfileInfo;
  bindings?: BindingInfo[];
  /**
   * 与登录状态相关，需要在登录拦截器中加入cookie=参数
   */
  cookie?: string;
}

/**
 * 二维码key值返回信息
 */
export interface QRKeyResponse {
  data: {
    code?: number;
    unikey: string;
  };
  code?: number;
}

/**
 * 创建二维码返回信息
 */
export interface QRCreateResponse {
  code?: number;
  data: {
    /**
     * url，原始信息
     */
    qrurl: string;
    /**
     * 图片（base64）
     */
    qrimg: string;
  };
}
/**
 * 800为二维码过期,801为等待扫码,802为待确认,803为授权登录成功(803状态码下会返回cookies)
 */
export enum QRState {
  Expired = 800,
  Waiting = 801,
  Authorizing = 802,
  Success = 803
}

/**
 * 二维码轮询返回信息
 */
export interface QRCheckResponse {
  code: QRState;
  message: string;
  cookie?: string;
}
